
function Foo(){
    this.bar = function (){
        console.log("我是bar")
    }
}

/**
 * 调用 new Foo() 会把创建出来的对象的原型关联到 Foo.prototype 上
 * 你不能创建一个类的多个实例，只能创建多个对象，它们[[Prototype]]
 * 关联的是同一个对象。但是在默认情况下并不会进行复制，因此这些对象之间并不会完全失去联系，它们是互相关联的。
 * @type {Foo}
 */
const fooObj = new Foo()

console.log("new Foo() 创建出来的对象的 prototype 是 Foo.prototype 吗？",Object.getPrototypeOf(fooObj) === Foo.prototype)
/**
 * Foo.prototype 默认（有一个公有并且不可枚举（参见第3章）的属性.constructor，
 * 这个属性引用的是对象关联的函数（本例中是Foo）。
 */
console.log(Foo.prototype.constructor === Foo)

/**
 * 此外，我们可以看到通过“构造函数”调用new Foo()
 * 创建的对象也有一个.constructor
 * 属性，指向“创建这个对象的函数”。
 * fooObj.constructor 其实在 fooObj.prototype.constructor
 * foo.prototype 保存在 Foo.prototype 中
 * 而 Foo.prototype.constructor 默认指向 Foo
 */
console.log(fooObj.constructor===Foo)
